package br.com.eventime.service;

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.eventime.dao.EventoDao;
import br.com.eventime.dao.Parametros;
import br.com.eventime.dao.RamoDao;
import br.com.eventime.dao.TipoPagamentoDao;
import br.com.eventime.entity.Evento;
import br.com.eventime.entity.Ramo;
import br.com.eventime.entity.TipoPagamento;

@Stateless
public class ConfiguracaoService {

	@Inject
	private RamoDao ramoDao;
	
	@Inject
	private EventoDao eventoDao;
	
	@Inject
	private TipoPagamentoDao tipoPagamentoDao;

	public List<Ramo> getListRamo(Ramo ramo){
		if((ramo.getCodigo() != null && ramo.getCodigo() != 0)|| (ramo.getDescricao() != null )){
			
			Parametros<Integer> codigoRamo = new Parametros<Integer>();;
			Parametros<String> descricaoRamo = new Parametros<String>();;
			codigoRamo.setNome("codigo");
			descricaoRamo.setNome("descricao");
			
			if(ramo.getCodigo() != null) {
				codigoRamo.setValor(ramo.getCodigo());
			} else {
				codigoRamo.setValor(0);
			}
			
			if(ramo.getDescricao() != null && ramo.getDescricao().trim().length() >0){
				descricaoRamo.setValor(ramo.getDescricao()+"%");
			}else {
				descricaoRamo.setValor(null);
			}
			
			return ramoDao.findToList("Ramo.findByCodeOrDesc", codigoRamo,descricaoRamo);
		}else {
			return ramoDao.findToList("Ramo.findAll",new Parametros[0]);
		}
		
		
	}
	
	public List<Evento> getListEvento(Evento evento){
		if((evento.getCodigo() != null && evento.getCodigo() != 0)|| (evento.getDescricao() != null )){
			
			Parametros<Integer> codigoEvento = new Parametros<Integer>();;
			Parametros<String> descricaoEvento = new Parametros<String>();;
			codigoEvento.setNome("codigo");
			descricaoEvento.setNome("descricao");
			
			if(evento.getCodigo() != null) {
				codigoEvento.setValor(evento.getCodigo());
			} else {
				codigoEvento.setValor(0);
			}
			
			if(evento.getDescricao() != null && evento.getDescricao().trim().length() >0){
				descricaoEvento.setValor(evento.getDescricao()+"%");
			}else {
				descricaoEvento.setValor(null);
			}
			
			return eventoDao.findToList("Evento.findByCodeOrDesc", codigoEvento,descricaoEvento);
		}else {
			return eventoDao.findToList("Evento.findAll",new Parametros[0]);
		}
	}
	
	public List<TipoPagamento> getListTipoPagamento(TipoPagamento tipoPagamento){
		if((tipoPagamento.getCodigo() != null && tipoPagamento.getCodigo() != 0)|| (tipoPagamento.getDescricao() != null )){
			
			Parametros<Integer> codigoTipoPagamento = new Parametros<Integer>();;
			Parametros<String> descricaoTipoPagamento = new Parametros<String>();;
			codigoTipoPagamento.setNome("codigo");
			descricaoTipoPagamento.setNome("descricao");
			
			if(tipoPagamento.getCodigo() != null) {
				codigoTipoPagamento.setValor(tipoPagamento.getCodigo());
			} else {
				codigoTipoPagamento.setValor(0);
			}
			
			if(tipoPagamento.getDescricao() != null && tipoPagamento.getDescricao().trim().length() >0){
				descricaoTipoPagamento.setValor(tipoPagamento.getDescricao()+"%");
			}else {
				descricaoTipoPagamento.setValor(null);
			}
			
			return tipoPagamentoDao.findToList("TipoPagamento.findByCodeOrDesc", codigoTipoPagamento,descricaoTipoPagamento);
		}else {
			return tipoPagamentoDao.findToList("TipoPagamento.findAll",new Parametros[0]);
		}
	}
	
	public void insereAlteraRamo(Ramo ramo){
		ramoDao.merge(ramo);
	}
	
	public void insereAlteraEvento(Evento evento){
		eventoDao.merge(evento);
	}
	
	public void insereAlteraTipoPagamento(TipoPagamento tipoPagamento){
		tipoPagamentoDao.merge(tipoPagamento);
	}
	
	public void removeRamo(Ramo ramo){
		ramoDao.delete(ramo, ramo.getCodigo());
	}
	
	public void removeEvento(Evento evento){
		eventoDao.delete(evento, evento.getCodigo());
	}
	
	public void removeTipoPagamento(TipoPagamento tipoPagamento){
		tipoPagamentoDao.delete(tipoPagamento, tipoPagamento.getCodigo());
	}
	
	public void setEventoDao(EventoDao eventoDao) {
		this.eventoDao = eventoDao;
	}
	
	public void setRamoDao(RamoDao ramoDao) {
		this.ramoDao = ramoDao;
	}

	public void setTipoPagamentoDao(TipoPagamentoDao tipoPagamentoDao) {
		this.tipoPagamentoDao = tipoPagamentoDao;
	}
	
	
}
